"""
[课程内容]: Python采集虎牙视频内容

[授课老师]: 青灯教育-自游  正式上课时间: 20:05

[环境使用]:
    Python 3.8
    Pycharm

[模块使用]:
    requests >>> 数据请求 第三方模块 pip install requests
    re
---------------------------------------------------------------------------------------------------
win + R 输入cmd 输入安装命令 pip install 模块名 (如果你觉得安装速度比较慢, 你可以切换国内镜像源)
先听一下歌 等一下后面进来的同学,20:05正式开始讲课 [有什么喜欢听得歌曲 也可以在公屏发一下]
相对应的安装包/安装教程/激活码/使用教程/学习资料/工具插件 可以加木子老师微信
---------------------------------------------------------------------------------------------------
听课建议:
    1. 对于本节课讲解的内容, 有什么不明白的地方 可以直接在公屏上面提问, 具体哪行代码不清楚 具体那个操作不明白
    2. 不要跟着敲代码, 先听懂思路, 课后找木子老师领取录播, 然后再写代码
    3. 不要进进出出, 早退不仅没有录播, 你还会思路中断
---------------------------------------------------------------------------------------------------
模块安装问题:
    - 如果安装python第三方模块:
        1. win + R 输入 cmd 点击确定, 输入安装命令 pip install 模块名 (pip install requests) 回车
        2. 在pycharm中点击Terminal(终端) 输入安装命令
    - 安装失败原因:
        - 失败一: pip 不是内部命令
            解决方法: 设置环境变量

        - 失败二: 出现大量报红 (read time out)
            解决方法: 因为是网络链接超时,  需要切换镜像源
                清华：https://pypi.tuna.tsinghua.edu.cn/simple
                阿里云：https://mirrors.aliyun.com/pypi/simple/
                中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
                华中理工大学：https://pypi.hustunique.com/
                山东理工大学：https://pypi.sdutlinux.org/
                豆瓣：https://pypi.douban.com/simple/
                例如：pip3 install -i https://pypi.doubanio.com/simple/ 模块名

        - 失败三: cmd里面显示已经安装过了, 或者安装成功了, 但是在pycharm里面还是无法导入
            解决方法: 可能安装了多个python版本 (anaconda 或者 python 安装一个即可) 卸载一个就好
                    或者你pycharm里面python解释器没有设置好
---------------------------------------------------------------------------------------------------
如何配置pycharm里面的python解释器?
    1. 选择file(文件) >>> setting(设置) >>> Project(项目) >>> python interpreter(python解释器)
    2. 点击齿轮, 选择add
    3. 添加python安装路径
---------------------------------------------------------------------------------------------------
pycharm如何安装插件?
    1. 选择file(文件) >>> setting(设置) >>> Plugins(插件)
    2. 点击 Marketplace  输入想要安装的插件名字 比如:翻译插件 输入 translation / 汉化插件 输入 Chinese
    3. 选择相应的插件点击 install(安装) 即可
    4. 安装成功之后 是会弹出 重启pycharm的选项 点击确定, 重启即可生效
---------------------------------------------------------------------------------------------------

爬虫基本流程思路: <通用>

一. 数据来源分析
    1. 去采集一个数据, 确定我们想要内容是什么?
    2. 通过开发者工具进行抓包分析, 分析这些数据内容 可以从哪里获取
        浏览器自带工具 F12 或者鼠标右键点击检查
        - 去分析视频地址是来自于哪里?
        - 通过视频播放url地址里面一段参数, 去通过搜索找寻数据包

二. 代码实现的过程
    1. 发送请求, 对于刚刚分析得到数据包发送请求
    2. 获取数据, 获取服务器返回响应数据<response>
    3. 解析数据, 提取我们想要数据内容 视频url地址以及视频标题
    4. 保存数据, 把视频内容保存本地文件夹

采集多个视频 分析请求url变化规律
    只要获取所有视频ID 就可以获取所有视频内容 <ID都去列表页面>

老师, 我想要通过python去找工作? <你可以直接根据招聘网站需求>
    爬虫工程师

    数据分析师
    开发工程师

学的东西越多, 相关知识点掌握越扎实 就业岗位选择越多 机会也就越多...

如果你按时听课, 按时完成作业, 是可以达到 8-15K

不仅仅从零基础入门到项目实战, 可以直接就业找工作, 还可以让你提升自己能力

全套课程学完 7个月的时间, 核心编程 高级开发 爬虫实战 数据分析 全栈<前端+后端>
    如果你自学 两年都学不会完....

核心编程 高级开发 爬虫实战 >>> 3个月的时间可以找爬虫工作

在线教育, 利用自己平时空余的时间来提升自己
    - 在线直播授课 每周三节课 每周135 或者 246 晚上20:00-22:00 平均2.5个小时左右 直播授课
    - 课后高清录播回放 课件 源码 笔记 文档 都会提供 <今天报名就可以学习> 永久观看学习
    - 多位专业老师解答辅导
        从安装环境开始就有问题...
        可以通过微信 文字 语音 远程操作 帮你解答辅导
    - 免费重修
        如果你跟着老师学完7个月之后, 觉得自己还不够扎实, 你可以继续跟着再学7个月


原价学费 13425 优惠后 8880 今天报名同学 后续只需要 7580  <>
加清风老师预定300学费
    - 可以领取一张1000元学费优惠券
    - 申请12/18期分期免息学习 7580/18 = 421 0利息0手续费  利息手续费又青灯教育承担的
        京东白条 支付宝花呗 信用卡 腾讯课堂官方教学分期渠道
    - 提供两个外包优惠名额

学费支付都可以直接走腾讯课堂, 第三方平台保障
    当你们学完课程之后, 这个课程学费才属于青灯教育的.... <提供发票以及合同>
    京东 淘宝 >>> 货发到你手上了, 确认收货了,这个钱才会由淘宝或者京东打到卖家手里里面

外包 就是别人花钱请你帮他写程序 <外包数量是有限...>
    比如: A某 需要采集虎牙视频内容, 花200元找人写程序
        200元就是你的

"""
import requests  # 数据请求模块 第三方模块 pip install requests
import re  # 正则表达式 内置模块 不需要安装
"""
爬虫模拟浏览器对于url地址发送请求, 获取服务器返回响应数据
发送请求:
    伪装模拟 headers  可以直接去开发者工具里面复制粘贴
    headers请求头字典数据类型, 构建完整键值对形式
调用requests模块里面get方法对于url地址发送请求, 并且携带上headers请求头伪装
最后用response变量接受返回数据
response = requests.get(url=url, headers=headers)
 <Response [200]>  <> 表示对象, response响应对象 200状态码表示请求成功
 
获取数据:
    response.text 获取响应对象文本数据 字符串数据类型
    response.json() 获取响应json字典数据 字典数据类型 <更加方便取值>

数据解析:
    字典取值方式, 可以直接根据键值对提取数据内容
    根据冒号左边的内容<键>提取冒号右边的内容<值>
"""
for page in range(1, 5):
    print(f'正在采集第{page}页的数据内容')
    link = f'https://v.huya.com/g/all?set_id=51&order=hot&page={page}'
    headers = {
        'user-agent': 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/101.0.4951.54 Safari/537.36'
    }
    response = requests.get(url=link, headers=headers)
    # print(response.text)
    # 从哪里<response.text里面>找什么数据<li data-vid="(\d+)"> \d+ 表示匹配一个或者多个数字
    video_id_list = re.findall('<li data-vid="(\d+)">', response.text)
    print(video_id_list)
    for video_id in video_id_list:
        url = f'https://liveapi.huya.com/moment/getMomentContent?videoId={video_id}&uid=&_=1652789442223'
        response = requests.get(url=url, headers=headers)
        # print(response.json()['status'])
        title = response.json()['data']['moment']['title']
        video_url = response.json()['data']['moment']['videoInfo']['definitions'][0]['url']
        # 保存数据 >>> 也是需要发送请求, 获取数据
        video_content = requests.get(url=video_url, headers=headers).content  # 获取二进制数据
        with open('video\\' + title + '.mp4', mode='wb') as f:
            f.write(video_content)
            print(title, '保存成功')



